package Thread;

public class RunnableDemo implements Runnable {
    /*
    模拟买票
    有三个窗口，总共卖100 张票
     */
    private int tickets = 100;
    private Object obj = new Object();
    @Override

    public void run() {
        for (; ; ) {
            synchronized (obj) {
                if (tickets > 0) {
                    try {
                        //三个线程都在这里休息
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 假设三个线程都按顺序来
                    // 就会执行三次
                    System.out.println(Thread.currentThread().getName() + ":" + tickets);
                    tickets--;
                }
            }
        }
    }
  /*  @Override
    public void run() {
        // 相同票
        for (;;){
        if (tickets > 0) {
            try {
                //三个线程都在这里休息
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 假设三个线程都按顺序来
            // 就会执行三次
            System.out.println(Thread.currentThread().getName() + ":" + tickets);
            tickets--;
        }
        }
    }
    public void run() {
        // 负票数
        for (;;){
        if (tickets > 0) {
            try {
                //三个线程都在这里休息
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 假设它们也是按顺序醒来
            // t1 抢到了CPU的执行权 在控制台输出  1
            会执行 tickets-- 0 退出循环
                t2  抢到了CPU的控制器 CPU的控制器 输出0
                会执行 tickets-- -1 退出循环
                    t3 抢到了CPU的控制 输出 -1
                    会执行 tickets-- -2 退出循环
            System.out.println(Thread.currentThread().getName() + ":" + tickets);
            tickets--;
        }
        }
    }
    */
}
